﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Globalization;
using Infraestrutura.Repositorios.SQL;
using System.Data.SqlClient;
using Model.Tipologias;


namespace Model.Produtos
{
    public class ProdutoService : RepositorioSQL<Produto>, IProdutoService
    {
        public ProdutoService()
        {
            Tabela = "Produtos";
            LigacaoBD = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
        }


        public Produto ObterPorIdProduto(String codigo)
        {
            return base.ObterPorChave(String.Format("@IdProduto='{0}'", codigo));
        }


        public IList<Produto> ObterTodos_O1()
        {
            return ObterLista("proc_ProdutosLoadAll_O1");
        }

        public IList<Produto> ObterPorPesquisa(String pesquisa, String codGrupoProduto)
        {
            String criterio = String.Empty;

            if(!String.IsNullOrEmpty(pesquisa))
            {
                criterio = "@Pesquisa='" + pesquisa + "' ";
            }
            if (!String.IsNullOrEmpty(codGrupoProduto))
            {
                if (!String.IsNullOrEmpty(criterio))
                    criterio += " ,";

                criterio += "@CodGrupoProduto='" + codGrupoProduto + "' ";
            }

            return ObterLista("proc_ProdutosLoadByPesquisaGeral " + criterio);
        }

        
        protected override String ObterParametrosInserir(Produto item)
        {
            return String.Format("@IdProduto={0}, @Nome='{1}', @Descricao='{2}', @CodUnidadeMedida='{3}', @PrecoCusto={4} , @CodGrupoProduto='{5}', @CodMoeda='{6}'",
                                   item.IdProduto, item.Nome, item.Descricao, item.UnidadeMedida.Codigo, 
                                   item.PrecoCusto.ToString(NumberFormatInfo.InvariantInfo), 
                                   item.GrupoProduto.CodGrupoProduto, item.Moeda.Codigo);
              


        }
        
        protected override String ObterParametrosApagar(Produto item)
        {
            return String.Format("@IdProduto='{0}'", 
                                  item.IdProduto);
        }


        protected override Produto CarregarDados(SqlDataReader dataReader, Produto item)
        {
            item.IdProduto = Convert.ToInt64(dataReader["IdProduto"]);
            item.Nome = dataReader["Nome"].ToString();
            item.PrecoCusto = Convert.ToDecimal(dataReader["PrecoCusto"]);
            item.UnidadeMedida = new Tipologia()
            {
                Codigo = dataReader["CodUnidadeMedida"].ToString(),
                Descricao = dataReader["DescricaoUMedida"].ToString(),
                DescricaoCurta = dataReader["DescricaoCurtaUMedida"].ToString(),
                Simbolo = dataReader["SimboloUMedida"].ToString(),
                Tipo = dataReader["TipoUMedida"].ToString()
            };
            item.Descricao = dataReader["Descricao"].ToString();
            item.Moeda = new Tipologia()
            {
                Codigo = dataReader["CodMoeda"].ToString(),
                Descricao = dataReader["DescricaoMoeda"].ToString(),
                DescricaoCurta = dataReader["DescricaoCurtaMoeda"].ToString(),
                Simbolo = dataReader["SimboloMoeda"].ToString(),
                Tipo = dataReader["TipoMoeda"].ToString()
            };
            item.GrupoProduto = new GrupoProduto()
            {
                CodGrupoProduto = dataReader["CodGrupoProduto"].ToString(),
                Descricao = dataReader["DescricaoGrupoProduto"].ToString(),
                Nome = dataReader["NomeGrupoProduto"].ToString()
            };
            item.GrupoProduto.GrupoPai = new GrupoProduto()
            {
                CodGrupoProduto = dataReader["CodGrupoProdutoPai"].ToString(),
                Descricao = dataReader["DescricaoGrupoProdutoPai"].ToString(),
                Nome = dataReader["NomeGrupoProdutoPai"].ToString()
            };

            return item;
        }

    }
}
